package thread.Test;

//WaitTest.java的源码
class ThreadA extends Thread{

 public ThreadA(String name) {
     super(name);
 }

 public void run() {
     synchronized (this) {
         System.out.println(Thread.currentThread().getName()+" call notify()");
         // 唤醒当前的wait线程
         notify();
     }
 }
}

public class WaitTest {

 public static void main(String[] args) {

     ThreadA t1 = new ThreadA("t1");

     synchronized(t1) {//获取“t1对象的同步锁”
         try {
             // 启动“线程t1”
             System.out.println(Thread.currentThread().getName()+" start t1");
             t1.start();

             // 主线程等待t1通过notify()唤醒。
             System.out.println(Thread.currentThread().getName()+" wait()");
             //释放“t1对象的锁”并且进入“等待(阻塞)状态”
             /*
              * t1.wait()是通过“线程t1”调用的wait()方法，但是调用t1.wait()的地方是在“主线程main”中。
              * 而主线程必须是“当前线程”，也就是运行状态，才可以执行t1.wait()。
              * 所以此时的“当前线程”是“主线程main”！
              * 因此t1.wait()是让“主线程”等待，而不是“线程t1”！
              * */
             t1.wait();

             System.out.println(Thread.currentThread().getName()+" continue");
         } catch (InterruptedException e) {
             e.printStackTrace();
         }
     }
 }
}/*
main start t1
main wait()
t1 call notify()
main continue

*/